<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    
  </style>
</head>
<body>
  
</body>
<script>
  // 1. forEach：遍历数组
  // 参数：回调函数，这个回调函数有三个形参，这个回调函数会被执行数组的长度次
    // 形参1：本次回调函数执行时，拿到的数组中的数据
    // 形参2：本次回调函数执行时，拿到的数组中的数据对应的索引
    // 形参3：正在遍历的原数组
  // 返回值：无
  // var arr = ["hello", 4, 5, 6, "world"];
  // console.log(arr);
  // var res = arr.forEach( function(val, idx, self){
  //   console.log(val, idx, self);
  // } );
  // console.log(res);
  // console.log(arr);

  // 2. map：遍历数组同时可以修改数组数据并返回新数组
  // 参数：回调函数，这个回调函数有三个形参，这个回调函数会被执行数组的长度次
    // 形参1：本次回调函数执行时，拿到的数组中的数据
    // 形参2：本次回调函数执行时，拿到的数组中的数据对应的索引
    // 形参3：正在遍历的原数组
  // 返回值：新数组，回调函数每次执行后的返回值
  // var arr = ["hello", 4, 5, 6, "world"];
  // console.log(arr);
  // var res = arr.map( function(val, idx, self){
  //   console.log(val, idx, self);
  //   return val *= 1.3;
  // } );
  // console.log(res);
  // console.log(arr);
  // console.log(arr === res);

  // 3. filter：遍历数组同时筛选数组数据
  // 参数：回调函数，这个回调函数有三个形参，这个回调函数会被执行数组的长度次
    // 形参1：本次回调函数执行时，拿到的数组中的数据
    // 形参2：本次回调函数执行时，拿到的数组中的数据对应的索引
    // 形参3：正在遍历的原数组
  // 返回值：新数组，回调函数每次执行后得到true时，遍历到的数据
  // var arr = ["hello", 4, 5, 6, "world"];
  // console.log(arr);
  // var res = arr.filter( function(val, idx, self){
  //   console.log(val, idx, self);
  //   return typeof val === "string";
  // } );
  // console.log(res);
  // console.log(arr);
  // console.log(arr === res);

  // 4. some：遍历数组同时判断数组数据是否符合要求
  // 参数：回调函数，这个回调函数有三个形参，这个回调函数会被执行数组的长度次
    // 形参1：本次回调函数执行时，拿到的数组中的数据
    // 形参2：本次回调函数执行时，拿到的数组中的数据对应的索引
    // 形参3：正在遍历的原数组
  // 返回值：布尔值，每次回调函数的返回值全为false，就是false，只要有一次为true，即为true
  // var arr = ["hello", 4, 5, 6, "world"];
  // console.log(arr);
  // var res = arr.some( function(val, idx, self){
  //   console.log(val, idx, self);
  //   return val === 4;
  // } );
  // console.log(res);
  // console.log(arr);
  
  // 5. every：遍历数组同时判断数组数据是否符合要求
  // 参数：回调函数，这个回调函数有三个形参，这个回调函数会被执行数组的长度次
    // 形参1：本次回调函数执行时，拿到的数组中的数据
    // 形参2：本次回调函数执行时，拿到的数组中的数据对应的索引
    // 形参3：正在遍历的原数组
  // 返回值：布尔值，每次回调函数的返回值全为true，就是true，只要有一次为false，即为false
  // var arr = ["hello", 4, 5, 6, "world"];
  // console.log(arr);
  // var res = arr.every( function(val, idx, self){
  //   console.log(val, idx, self);
  //   return true;
  // } );
  // console.log(res);
  // console.log(arr);

  // 6. reduce：归并，遍历数组同时计算数组的数据
  // 参数1：回调函数，这个回调函数有四个形参，这个回调函数会被执行数组的长度次
    // 形参1：从第二次执行回调函数开始直到最后一次，都表示上一次回调函数的返回值
      // 如果reduce存在实参2，第一次执行回调函数时，形参1为实参2
      // 如果reduce不存在实参2，第一次执行回调函数时，形参1为数组的第一个数据
    // 形参2：
      // 如果reduce存在实参2，回调函数每次执行时，形参2会从数组的第一个数据开始获取
      // 如果reduce不存在实参2，回调函数每次执行时，形参2会从数组的第二个数据开始获取
    // 形参3：本次回调函数执行时，形参2对应的索引
    // 形参4：正在遍历的原数组
  // 参数2：可选，任意值
  // 返回值：回调函数最后一次执行后的返回值
  // var arr = [7, 8, 9, 6];
  // var res = arr.reduce(function(a, b, idx, self){
  //   console.log(a, b, idx);
  //   return 365;
  // }, "abc");
  // console.log(res);

  
  // var arr = [7, 8, 9, 6];
  // var res = arr.reduce(function(a, b, idx, self){
  //   return a + b;
  // }, 0);
  // console.log(res);



</script>
</html>